<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
  
    setTimeout(() => {
      console.log("0")
    }, 0)
    new Promise((resolve,reject)=>{
      console.log("1")
      resolve()
    })
    .then(()=>{        
      console.log("2")
      new Promise((resolve,reject)=>{
        console.log("3")
        resolve()
      })
      .then(()=>{console.log("4")})
      .then(()=>{console.log("5")})
    })
    .then(()=>{
      console.log("6")
    })
    new Promise((resolve,reject)=>{
      console.log("7")
      resolve()
    }).then(()=>{         
      console.log("8")
    })

    /* 
    输出: 
    promise内部:  []
    宏: []
    微:  []  
    */

    // new Promise((resolve,reject)=>{
    //   // resolve()
    // }).then(
    //   () => {
    //     console.log('1')
    //     Promise.resolve().then(() => {
    //       console.log('4')
    //     })
    //   }
    // ).then(
    //   () => {
    //     console.log('3')
    //   }
    // )
    // console.log('2')

    // 给成功的promise指定成功的回调 => 回调会进入微队列
    // 给pending的promise指定成功的回调 => 
        // 不可以将回调函数放入队列
        // 内部保存起来, 等到promise变为成功的状态, 就将内部的保存回调放入队列中
      
    // then()方法是立即执行完, 立即返回一个promise, 默认开始是pending状态的
    // 等then指定的回调函数有了结果后, 返回的promise也会更新为成功/失败

   /*  new Promise((resolve,reject)=>{
      resolve()
    }).then(() => { // 回调1
      // return new Promise((resolve,reject)=>{
      new Promise((resolve,reject)=>{
        setTimeout(() => {
          resolve()
        }, 1000);
      })
      // return undefined
    }) // 返回的promise是什么状态?  pending => fulfilled
    .then(() => { // 回调2

   })
   console.log('111') // 此时上面的2个成功的回调在哪?    内部/队列中 
   */

  </script>
</body>
</html>